package demo01;

/**
 * 环境类实际上是真正拥有状态的对象，我们只是将环境类中与状态有关的代码提取出来封装到专门的状态类中。
 * 在状态模式结构图中，环境类Context与抽象状态类State之间存在单向关联关系，在Context中定义了一个State对象。在实际使用时，
 * 它们之间可能存在更为复杂的关系，State与Context之间可能也存在依赖或者关联关系。
 * ————————————————
 * 版权声明：本文为CSDN博主「xushiyu1996818」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
 * 原文链接：https://blog.csdn.net/xushiyu1996818/article/details/86719079
 */
public class Context {
    private State state; //维持一个对抽象状态对象的引用
    private int value; //其他属性值，该属性值的变化可能会导致对象状态发生变化

    public State getState() {
        return state;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    //设置状态对象
    public void setState(State state) {
        this.state = state;
    }



    public void changeState() {
        //判断属性值，根据属性值进行状态转换
        if (value == 0) {
            this.setState(new ConcreteStateA());
        }
        else if (value == 1) {
            this.setState(new ConcreteStateB());
        }

    }  public void request() {
        //其他代码
        state.handle(); //调用状态对象的业务方法
        //其他代码
    }

}
